`
https://leetcode.cn/problems/construct-string-from-binary-tree/
`

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {string}
 */
var tree2str = function (root) {
  if (root === null) return ''
  // 如果是叶子结点，返回自己的字符串作为值即可
  if (root.left === null && root.right === null) {
    return `${root.val}`
  }

  const leftStr = tree2str(root.left)
  const rightStr = tree2str(root.right)

  // 如果只有左子树，省略右空子树
  if (root.left && !root.right) {
    return `${root.val}(${leftStr})`
  }
  // 如果只有右子树，左空子树不能省略
  if (!root.left && root.right) {
    return `${root.val}()(${rightStr})`
  }
  return `${root.val}(${leftStr})(${rightStr})`
};